package com.heima.common.minio.config;


import com.heima.common.minio.properties.MinIOProperties;
import com.heima.common.minio.service.MinIOService;
import io.minio.MinioClient;
import io.minio.errors.InvalidEndpointException;
import io.minio.errors.InvalidPortException;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

//启动类启动 扫描到配置类@configuration 则MinIOProperties 、MinIOService minioClient就产生对象都存到ioc了
@Configuration
@EnableConfigurationProperties(MinIOProperties.class)//存ioc的第一种方式 ：此属性类对象加入到ioc容器 得是类  还有替代办法 在需要存ioc的类上加@Component 这俩只留一个
@Import(MinIOService.class)//存ioc的第二种方式
//加个“开关”=开关指是否满足加载条件 满足就扫MinIOConfig
//@ConditionalOnClass //当前项目有某一个class字节码文件时当前类才会被加载 但因是在common 所以每个项目都有个class 不可用此注解
@ConditionalOnProperty(prefix = "minio",value = "enable",havingValue = "true")//所在项目的yml中满足此条件则MinIOConfig才会被加载
public class MinIOConfig {
//@Autowired    注解注入也可替代 存ioc的第三种方式 ：
//private  MinIOProperties minIOProperties;
    @Bean                      //存ioc的第三种方式 ： 构造方式注入

    public MinioClient minioClient(MinIOProperties minIOProperties) throws InvalidPortException, InvalidEndpointException {
        // 使用MinIO服务的URL，端口，Access key和Secret key创建一个MinioClient对象
        MinioClient minioClient = MinioClient.builder()
                .endpoint(minIOProperties.getEndpoint())
                .credentials(minIOProperties.getAccessKey(),minIOProperties.getSecretKey())
                .build();
        return minioClient;
    }
}
